# 并查集 模板
from collections import defaultdict

class UnionFind:

    def __init__(self, n,a):
        # 初始化

        self.fa = defaultdict(int)   # 生成序列 fa[i]=i 表示 i的 根节点是 i
        # self.size = [1] * (n + 1)  # 集合的大小
        self.cnt = n  # 连通块的个数

        for i in range(n):
            self.fa[a[i]] = a[i]
        print(self.fa)

    def find(self, x):
        if self.fa[x]!=x:
            self.fa[x]=self.find(self.fa[x])
        return self.fa[x]

    def merge(self,x,y):
        xx,yy=self.find(x),self.find(y)
        if xx == yy:
            return False
        self.fa[xx]=yy
        # self.size[yy]+=self.size[xx]
        self.cnt-=1
        return True

    def is_same(self,x,y):
        return self.find(x) == self.find(y)

    # def get_size(self,x):
    #     return self.size[self.find(x)]

n=int(input())
a=list(map(int,input().split()))
un=UnionFind(n,a)
m=int(input())
for _ in range(m):
    x,y=map(int,input().split())
    un.merge(x,y)

group=defaultdict(list)

for i in a:
    # 构建 根节点的邻接表
    group[un.find(i)].append(i)

for key in group:
    # 小 到 大 排序 最后一个是最大的
    group[key].sort()

res=[]
for i in a:
    # 找到根节点
    root=un.find(i)
    if group[root]:
        # 输出最大的 并删除
        res.append(str(group[root].pop()))

print(" ".join(res))